﻿using System;
using System.Collections.Generic;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace br.com.nrtech.ccb.bot.ui
{
    public partial class Form1 : Form
    {
        ArrayList listaPaises;
        ArrayList listaEstados;
        ArrayList listaCidades;
        ArrayList listaIgrejas;
        ArrayList listaSitesVisitados;

        ArrayList listaPaisesNavegados;

        HtmlElement paises;
        HtmlElement estados;
        HtmlElement cidades;        

        public Form1()
        {
            InitializeComponent();
            listaSitesVisitados = new ArrayList();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                listaPaises = new ArrayList();
                listaEstados = new ArrayList();
                listaCidades = new ArrayList();
                listaIgrejas = new ArrayList();
                listaPaisesNavegados = new ArrayList();


                webBrowser1.Navigate(@tbURL.Text + "relatorio");
                while (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
                    Application.DoEvents();
                listaSitesVisitados.Add(@tbURL.Text + "relatorio");

                paises = webBrowser1.Document.GetElementsByTagName("select")["pais"];
                if (paises == null) return;

                foreach (HtmlElement pais in paises.Children)
                {
                    //if (!pais.InnerText.StartsWith("A") && !pais.InnerText.StartsWith("Á"))
                    if (pais.GetAttribute("value").Equals("#"))
                        continue;

                    if (listaPaises.IndexOf(pais.InnerText) == -1)
                        listaPaises.Add(pais.InnerText);
                }

                foreach (String novoSite in listaPaises)
                {
                    if (listaSitesVisitados.IndexOf(@tbURL.Text + @"ccb.php?relatorios=sim&pais=" + @novoSite) > -1)
                        continue;

                    webBrowser1.Navigate(@tbURL.Text + @"ccb.php?relatorios=sim&pais=" + @novoSite);
                    while (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
                        Application.DoEvents();
                    listaSitesVisitados.Add(@tbURL.Text + @"ccb.php?relatorios=sim&pais=" + @novoSite);
                    montaEstados(novoSite);

                    listaPaisesNavegados.Add(novoSite);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("erro: " + ex.Message);
            }
            finally
            {
                lbSite.Text = listaCidades.Count.ToString();

                foreach (String cidade in listaCidades)
                {
                    System.IO.File.AppendAllText(@"c:\projetos\cidades.txt", cidade + "\n");
                }
            }
        }

        public void montaEstados(String pais)
        {
            estados = webBrowser1.Document.GetElementsByTagName("select")["estado"];
            if (estados == null) return;

            foreach (HtmlElement estado in estados.Children)
            {
                if (estado.GetAttribute("value").Equals("#"))
                    continue;

                if (listaEstados.IndexOf(estado.InnerText) == -1)
                    listaEstados.Add(@"?relatorios=sim&estado=" + @estado.InnerText + @"&pais=" + @pais);
            }

            foreach (String novoSite in listaEstados)
            {
                if (listaSitesVisitados.IndexOf(@tbURL.Text + @novoSite) > -1)
                    continue;

                webBrowser1.Navigate(@tbURL.Text + @novoSite);
                while (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
                    Application.DoEvents();
                listaSitesVisitados.Add(@tbURL.Text + @novoSite);
                montaCidades();
            }                        

        }

        public void montaCidades()
        {
            cidades = webBrowser1.Document.GetElementsByTagName("select")["cidade"];
            if (cidades == null) return;

            foreach (HtmlElement cidade in cidades.Children)
            {
                if (cidade.GetAttribute("value").Equals("#"))
                    continue;

                if (listaCidades.IndexOf(cidade.GetAttribute("value")) == -1)
                    listaCidades.Add(cidade.GetAttribute("value"));
            }
        }

        private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e)
        {
            lbSite.Text = e.Url.ToString();
            statusNaveg.Text = "Abrindo " + e.Url.ToString();
        }

        private void webBrowser1_ProgressChanged(object sender, WebBrowserProgressChangedEventArgs e)
        {
            progressoNaveg.Maximum = Convert.ToInt32(e.MaximumProgress);
            progressoNaveg.Value = Convert.ToInt32(e.CurrentProgress < 0 ? 0 :
                e.CurrentProgress > e.MaximumProgress ? e.MaximumProgress : e.CurrentProgress);
        }

        private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            statusNaveg.Text = "";
            progressoNaveg.Value = 0;
        }
    }
}
